/*******************************************************************************
* Copyright (c) 2007, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.tests.services;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.internal.services.IServiceLocatorCreator;
import org.eclipse.ui.internal.services.IWorkbenchLocationService;
import org.eclipse.ui.internal.services.WorkbenchLocationService;
import org.eclipse.ui.progress.IProgressService;
import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
import org.eclipse.ui.services.AbstractServiceFactory;
import org.eclipse.ui.services.IDisposable;
import org.eclipse.ui.services.IServiceLocator;
import org.eclipse.ui.services.IServiceScopes;
import org.eclipse.ui.tests.harness.util.UITestCase;
import junit.framework.TestSuite;
/**
* @since 3.4
*
*/
public class ContributedServiceTest extends UITestCase {
public static TestSuite suite() {
TestSuite ts = new TestSuite();
ts.addTest(new ContributedServiceTest("testGlobalService"));
// TODO ts.addTest(new ContributedServiceTest("testWindowService"));
// TODO ts.addTest(new
// ContributedServiceTest("testLocalServiceCreated"));
// TODO ts.addTest(new
// ContributedServiceTest("testLocalDialogService"));
ts.addTest(new ContributedServiceTest("testWorkbenchServiceFactory"));
return ts;
}
/**
* @param testName
*/
public ContributedServiceTest(String testName) {
super(testName);
}
public void testGlobalService() throws Exception {
IWorkbenchLocationService wls = getWorkbench()
.getService(IWorkbenchLocationService.class);
assertNotNull(wls.getWorkbench());
assertNull(wls.getWorkbenchWindow());
ILevelService l = getWorkbench().getService(
ILevelService.class);
assertNotNull(l);
assertEquals(1, l.getLevel());
l = getWorkbench().getService(ILevelService.class);
assertNotNull(l);
assertEquals(1, l.getLevel());
assertEquals(1, LevelServiceFactory.instancesCreated);
}
public void testWindowService() throws Exception {
IServiceLocator locator = getWorkbench().getActiveWorkbenchWindow();
IWorkbenchLocationService wls = locator
.getService(IWorkbenchLocationService.class);
assertNotNull(wls.getWorkbenchWindow());
ILevelService l = locator
.getService(ILevelService.class);
assertNotNull(l);
assertEquals(2, l.getLevel());
assertEquals(2, LevelServiceFactory.instancesCreated);
l = locator.getService(ILevelService.class);
assertNotNull(l);
assertEquals(2, l.getLevel());
l = getWorkbench().getService(ILevelService.class);
assertNotNull(l);
assertEquals(1, l.getLevel());
assertEquals(2, LevelServiceFactory.instancesCreated);
}
private static class TempLevelFactory extends AbstractServiceFactory {
private int level;
public TempLevelFactory(int l) {
level = l;
}
@Override
public Object create(Class serviceInterface,
IServiceLocator parentLocator, IServiceLocator locator) {
return new ILevelService() {
@Override
public int getLevel() {
return level;
}
};
}
}
public void testLocalServiceCreated() throws Exception {
IServiceLocator parent = getWorkbench().getActiveWorkbenchWindow();
IWorkbenchLocationService wls = parent
.getService(IWorkbenchLocationService.class);
assertNotNull(wls.getWorkbenchWindow());
IServiceLocatorCreator lc = parent
.getService(IServiceLocatorCreator.class);
IServiceLocator locator = lc.createServiceLocator(parent, null,
new IDisposable() {
@Override
public void dispose() {
}
});
ILevelService l = locator
.getService(ILevelService.class);
assertNotNull(l);
assertEquals(3, l.getLevel());
assertEquals(3, LevelServiceFactory.instancesCreated);
if (locator instanceof IDisposable) {
((IDisposable) locator).dispose();
}
locator = lc.createServiceLocator(parent, null, new IDisposable() {
@Override
public void dispose() {
}
});
l = locator.getService(ILevelService.class);
assertNotNull(l);
assertEquals(3, l.getLevel());
assertEquals(4, LevelServiceFactory.instancesCreated);
if (locator instanceof IDisposable) {
((IDisposable) locator).dispose();
}
locator = lc.createServiceLocator(parent, new TempLevelFactory(8),
new IDisposable() {
@Override
public void dispose() {
}
});
l = locator.getService(ILevelService.class);
assertNotNull(l);
assertEquals(8, l.getLevel());
assertEquals(4, LevelServiceFactory.instancesCreated);
if (locator instanceof IDisposable) {
((IDisposable) locator).dispose();
}
}
public void testLocalDialogService() throws Exception {
IServiceLocator parent = getWorkbench();
IServiceLocatorCreator lc = parent
.getService(IServiceLocatorCreator.class);
IServiceLocator locator = lc.createServiceLocator(parent,
new AbstractServiceFactory() {
@Override
public Object create(Class serviceInterface,
IServiceLocator parentLocator,
IServiceLocator locator) {
if (IWorkbenchLocationService.class
.equals(serviceInterface)) {
IWorkbenchLocationService wls = parentLocator
.getService(IWorkbenchLocationService.class);
return new WorkbenchLocationService(
IServiceScopes.DIALOG_SCOPE, wls
.getWorkbench(), null, null, null,
null, wls.getServiceLevel()+1);
}
return null;
}
}, new IDisposable() {
@Override
public void dispose() {
}
});
IWorkbenchLocationService wls = locator
.getService(IWorkbenchLocationService.class);
assertNotNull(wls.getWorkbench());
assertNull(wls.getWorkbenchWindow());
assertEquals(1, wls.getServiceLevel());
assertEquals(IServiceScopes.DIALOG_SCOPE, wls.getServiceScope());
}
public void testWorkbenchServiceFactory() throws Exception {
IWorkbenchWindow window = getWorkbench().getActiveWorkbenchWindow();
IProgressService progress = window
.getService(IProgressService.class);
assertNotNull(progress);
assertEquals(getWorkbench().getProgressService(), progress);
IViewPart part = null;
IViewReference[] refs = window.getActivePage().getViewReferences();
for (IViewReference ref : refs) {
if ((part = ref.getView(false)) != null) {
break;
}
}
assertNotNull(part);
progress = part.getSite().getService(
IProgressService.class);
assertFalse(progress == getWorkbench().getProgressService());
assertEquals(part.getSite().getService(
IWorkbenchSiteProgressService.class), progress);
assertEquals(part.getSite().getAdapter(
IWorkbenchSiteProgressService.class), progress);
}
}